from bs4 import BeautifulSoup

from ..file_download.parsing import Parser


def test_get_page_tree() -> None:
    """ Тестируем получение дерева указанной страницы с помощью BeautifulSoup """

    link = 'https://gitea.radium.group/radium/project-configuration'
    result = Parser().get_page_tree(link)
    assert type(result) == BeautifulSoup


def test_get_table_of_elements() -> None:
    """ Тестируем получение таблицы элементов со страницы """

    link = 'https://gitea.radium.group/radium/project-configuration'
    tree = Parser().get_page_tree(link)

    expected_element = tree.find('table', id='repo-files-table')
    available_element = Parser().get_table_of_elements(tree)

    assert expected_element == available_element


def test_get_list_of_table_elements() -> None:
    """ Тестируем получение списка элементов таблицы """

    link = 'https://gitea.radium.group/radium/project-configuration'
    tree = Parser().get_page_tree(link)
    table = Parser().get_table_of_elements(tree)

    expected_element = table.find('tbody').find_all('tr')
    available_element = Parser().get_list_of_table_elements(table)

    assert expected_element == available_element


def test_check_element_is_directory() -> None:
    """ Тестируем проверку элемента таблицы на то, является ли он директорией """

    link = 'https://gitea.radium.group/radium/project-configuration'
    tree = Parser().get_page_tree(link)
    table = Parser().get_table_of_elements(tree)

    table_element = table.find('tbody').find_all('tr')

    for element in table_element:

        is_derictory = 'directory' in ' '.join(
            element.find('svg').get('class')
        )
        if is_derictory:
            result = Parser().check_element_is_directory(element)
            assert result == True
        else:
            result = Parser().check_element_is_directory(element)
            assert result == False


def test_get_table_elements() -> None:
    """
    Тестируем получение элементов таблицы (ссылки и названия на папки и файлы)
    """

    def check_file_tree(file_tree) -> None:
        """ Проверяем дерево файлов """

        for element in file_tree:

            assert type(element) == str
            value = file_tree[element]

            if type(value) == str:
                assert True
            elif type(value) == dict:
                check_file_tree(value)
            else:
                assert False


    # ВЫШЕ ОПРЕДЕЛЕНИЕ ФУНКЦИЙ

    file_tree = {}
    link = 'https://gitea.radium.group/radium/project-configuration'
    tree = Parser().get_page_tree(link)
    table = Parser().get_table_of_elements(tree)

    Parser().get_table_elements(
        file_tree,
        table,
    )

    check_file_tree(file_tree)


def test_parse_file_tree() -> None:
    """
    Тестируем парсинг дерева файлов репозитория. Собираем название и ссылки
    папок и файлов.
    """

    file_tree = {}
    link = 'https://gitea.radium.group/radium/project-configuration'
    tree = Parser().get_page_tree(link)
    table = Parser().get_table_of_elements(tree)
    Parser().get_table_elements(file_tree, table)
    available_result = Parser().parse_file_tree()

    assert file_tree == available_result
